package com.example.BlockChain.entity.block;

import org.springframework.stereotype.Component;

// 标记为一个 Spring 组件，表明它可以被自动扫描和注入。
@Component
public class Block {

    // 区块索引，用于标识该区块在链中的位置。
    public String blockIndex;

    // 当前区块的哈希值，用于验证区块的唯一性。
    public String blockHash;

    // 上一个区块的哈希值，确保区块链的连续性。
    public String preBlockHash;

    // 工作量证明（Workload Proof），区块链中的重要概念，用于保证安全性。
    public String workLoad;

    // 区块创建的时间戳。
    public String createTime;

    // 数据存储路径（可能是区块相关数据存放的本地文件路径）。
    public String path;

    // 区块存储的数据，以 JSON 格式表示，存储交易或者其他内容。
    public String dataJson;

    // 当前区块中涉及的交易 ID 列表，用逗号分隔。
    public String tradeIds;

    // 区块的数据库主键 ID，用于持久化存储。
    public int id;

    // 随机数，用于生成区块哈希值时参与计算。
    public String randomNumber;

    // 自定义方法，用于生成区块的工作描述字符串。
    public String workString() {
        return "Block{" +
                "blockIndex='" + blockIndex + '\'' +
                ", blockPreHash='" + preBlockHash + '\'' +
                ", workLoad='" + workLoad + '\'' +
                ", dataJson='" + dataJson + '\'' +
                ", createTime='" + createTime + '\'' +
                ", path='" + path + '\'' +
                ", randomNumber='" + randomNumber + '\'' +
                ", tradeIds='" + tradeIds + '\'' +
                '}';
    }

    // 重写的 `toString` 方法，用于打印区块对象的详细信息。
    @Override
    public String toString() {
        return "Block{" +
                "blockIndex='" + blockIndex + '\'' +
                ", blockHash='" + blockHash + '\'' +
                ", blockPreHash='" + preBlockHash + '\'' +
                ", workLoad='" + workLoad + '\'' +
                ", dataJson='" + dataJson + '\'' +
                ", createTime='" + createTime + '\'' +
                ", path='" + path + '\'' +
                ", tradeIds='" + tradeIds + '\'' +
                ", randomNumber='" + randomNumber + '\'' +
                '}';
    }

    // Getter 和 Setter 方法，用于访问和修改区块的属性。
    // blockIndex
    public String getBlockIndex() {
        return blockIndex;
    }

    public void setBlockIndex(String blockIndex) {
        this.blockIndex = blockIndex;
    }

    // blockHash
    public String getBlockHash() {
        return blockHash;
    }

    public void setBlockHash(String blockHash) {
        this.blockHash = blockHash;
    }

    // preBlockHash
    public String getPreBlockHash() {
        return preBlockHash;
    }

    public void setPreBlockHash(String preBlockHash) {
        this.preBlockHash = preBlockHash;
    }

    // workLoad
    public String getWorkLoad() {
        return workLoad;
    }

    public void setWorkLoad(String workLoad) {
        this.workLoad = workLoad;
    }

    // path
    public String getPath() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
    }

    // createTime
    public String getCreateTime() {
        return createTime;
    }

    public void setCreateTime(String createTime) {
        this.createTime = createTime;
    }

    // id
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    // randomNumber
    public String getRandomNumber() {
        return randomNumber;
    }

    public void setRandomNumber(String randomNumber) {
        this.randomNumber = randomNumber;
    }

    // dataJson
    public String getDataJson() {
        return dataJson;
    }

    public void setDataJson(String dataJson) {
        this.dataJson = dataJson;
    }

    // tradeIds
    public String getTradeIds() {
        return tradeIds;
    }

    public void setTradeIds(String tradeIds) {
        this.tradeIds = tradeIds;
    }
}
